%Entête
\documentclass{beamer}
\usepackage[frenchb]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{verbatim}
\usepackage{array}
\usetheme{Warsaw}

%Pour supprimer le bas de page (il n'y a pas de place pour tous les noms d'auteurs)
\usepackage{beamerouterthemesplit}
\setbeamertemplate{footline}{} 


%Titre et sous-titre
\title{Remaniement du site de gestion de projet}
\subtitle{Projet L3}

%Auteurs
\author{BARTHELEMY Antonin\\
FRAPPEREAU Olivier\\
GENJOYAN Hovannes\\
BRINGUIER Clément\\
BASSOUMI Julia\\
CHOQUET Brett\\
KONIG Jolan\\
VICO Brice\\}\institute{Université Montpellier II}

%Date
\date\today

%Numerotation (en bas à droite)
\addtobeamertemplate{footline}{\hfill\insertframenumber/\inserttotalframenumber\hspace{2em}\null}

%Début du document
\begin{document}

%Page d'acceuil
\begin{frame}
\titlepage
\end{frame}


%Diapo 1 : Sommaire
\begin{frame}
    \frametitle{Sommaire}
    \tableofcontents
\end{frame}


%Diapo 1 : INTRO - Remaniement du site de gestion de projet
\section{Introduction}
\begin{frame}
    \frametitle{Introduction}
    \framesubtitle{Remaniement du site de gestion de projet}
        \begin{block}{But : refonte du site de gestion de projet}
            \begin{itemize}
                \item Analyse du site de gestion de projet qui est en ligne
                \item Récupération de toutes les fonctionnalités
                \item Apprentissage de l'utilisation de Symfony
                \item Création du nouveau site
            \end{itemize}
        \end{block}
\end{frame}


%Diapo 2 : Partie I - Les différentes technologies utilisées
\section{Les différentes technologies utilisées}
\subsection{PHP, HTML \& Twig}

% HMTL
\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{PHP, HTML \& Twig}
    \begin{block}{HTML}
        \begin{itemize}
            \item \textbf{L'Hypertext Markup Language (HTML)} est le format de données conçu pour représenter les pages web\\
		        $\rightarrow$ Langage de balisage permettant d’écrire de l’hypertexte\\
		        $\rightarrow$ Structure sémantique et mise en forme du contenu des pages\\
		        $\rightarrow$ Inclure des images, des formulaires de saisie, des programmes informatiques...
    \end{itemize}
    \end{block}
\end{frame}

% PHP
\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{PHP, HTML \& Twig}
    \begin{block}{PHP}
    \begin{itemize}
        \item \textbf{Hypertext Preprocessor (PHP)}\\
            $\rightarrow$ Langage de programmation libre.\\
            $\rightarrow$ Permet de produire des pages web dynamiques.\\
            $\rightarrow$ Peut fonctionner comme n'importe quel langage interprété de façon locale.\\
            $\rightarrow$ \textbf{PHP} est orienté-objet.\\
    \end{itemize}
    \end{block}
\end{frame}

%Twig
\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{PHP, HTML \& Twig}
    \begin{block}{Twig}
    \begin{itemize}
        \item \textbf{Twig} est un moteur de template (vue) \\
            $\rightarrow$ Twig offre son pseudo-langage.\\
            $\rightarrow$ Permet d'utiliser du code dynamique dans la vue.\\
            $\rightarrow$ Syntaxe plus concise et plus claire.\\
        \end{itemize}
    \end{block}
\end{frame}

\begin{frame}[fragile]
    \frametitle{Twig}
    \framesubtitle{Exemple}
    \begin{exampleblock}{Avec HTML}
        \begin{verbatim}
        <p>
            <?php echo $etudiant->getNom() ?>
        </p>
        \end{verbatim}
    \end{exampleblock}
    \begin{exampleblock}{Avec Twig}
        \begin{verbatim}
        <p>
            {{ etudiant.nom }}
        </p>
        \end{verbatim}
    \end{exampleblock}
\end{frame}

%Symfony
\subsection{Symfony2}
\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{Symfony}
    \begin{block}{Symfony}
        \begin{itemize}
            \item Un \textbf{framework} libre écrit en PHP.
            \item Facilite et accélère le développement de sites dynamiques de façon structurée
            \item Avec un code clair, maintenable et évolutif
            \item Mis régulièrement à jour, avec une forte communauté en plein expansion
            \item Permet de découpler le code (séparation de PHP et HTML)
            \item Utilisation de l'architecture \textbf{MVC} (Modèle-Vue-Contrôleur)
        \end{itemize}
    \end{block}
    \centering\fbox{\includegraphics[scale=0.2]{symfony.png}}
\end{frame}

\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{Symfony}
    \begin{block}{Architecture MVC}
        \begin{itemize}
            \item \textbf{Modèle :} partie qui gère les données du site :\\
                $\rightarrow$ Récupération, organisation et assemblage des données\\
            \item \textbf{Vue :} partie qui se concentre sur l'affichage :\\
                $\rightarrow$ Pas de calcul, juste récupération des variables pour savoir quoi afficher\\
                $\rightarrow$ Que du code HTML et Twig\\
            \item \textbf{Contrôleur :} partie qui gère la logique du code :\\
                $\rightarrow$ Intermédiaire entre le modèle et la vue\\
                $\rightarrow$ Demande au modèle les données, analyse\\
                $\rightarrow$ Prend des décisions et renvoie le texte à afficher à la vue\\
                $\rightarrow$ Contient le code PHP\\
        \end{itemize}
    \end{block}
\end{frame}

\begin{frame}
    \frametitle{Symfony}
    \framesubtitle{Architecture MVC}
    \fbox{\includegraphics[scale=0.4]{mvc.png}}
\end{frame}

%Doctrine
\subsection{Doctrine}
\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{Doctrine}
    \begin{block}{Doctrine}
        \begin{itemize}
            \item \textbf{ORM} (object-relational mapping) :\\
                $\rightarrow$ Classe ou ensemble de classes visant à ce que l'utilisateur puisse manipuler ses tables de données comme si c'étaient des objets.\\
                $\rightarrow$ Les champs d'une table sont considérés comme de simples attributs.\\
                $\rightarrow$ L'ORM se charge de la communication avec la base de données.\\
                $\rightarrow$ Doctrine permet de mapper les objets avec une base de données relationnelle (comme MySQL)
        \end{itemize}
    \end{block}
\end{frame}

\begin{frame}[fragile]
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{Doctrine}
    \begin{exampleblock}{Exemple}
        \begin{verbatim}
<?php
    $unProjet = new Projet();

    // On définit les caractéristiques du projet
    $unProjet->titre = 'Remaniement d'un site'; 
    $unProjet->description = 'Refonte du site';

    // Puis, on sauvegarde dans la base de données
    $unProjet->save();
?>
        \end{verbatim}
    \end{exampleblock}
\end{frame}

\subsection{Bootstrap}
\begin{frame}
    \frametitle{I - Les différentes technologies utilisées}
    \framesubtitle{Bootstrap}
    \begin{block}{Twitter Bootstrap}
        \begin{itemize}
            \item \textbf{Twitter Bootstrap :} Framework CSS / Javascript regroupant des ensembles de plugins Jquery et des classes CSS.\\
            Permet d'avoir un design cohérent et responsive (adaptable).\\
            \begin{verbatim}
                <\textcolor{blue}{div} class="well"> Je suis dans un well !<\textcolor{blue}{/div}>
            \end{verbatim}
        \end{itemize}
    \end{block}
\end{frame}

%Fin de la partie Hovannes

%Partie Sécurité, configuration et gestion des utilisateurs 
%Please don't touch my partie !!

\section{Configuration de Symfony2}
\subsection{La sécurité}
\begin{frame}
    \frametitle{La sécurité}
    %j'peux au moins corriger ou pas ? fonction/focnt principales :p
    Une des fonctionnalités principales d'un site web est la possibilité de s'authentifier.

    \begin{block}{Méthodes d'authentifications}
        \begin{itemize}
            \item HTTP
            \item Sessions
            \item Cookies
        \end{itemize}
    \end{block}

\end{frame}

\begin{frame}{La sécurité}
    
     \begin{block}{Avec Symfony2}
        \begin{itemize}
            \item Authentification HTTP
            \item Système de hiérarchie avec des roles
            \item Fichier de configurations, "app/config/security.yml"
        \end{itemize}
    \end{block}
    
\end{frame}

\begin{frame}[fragile]{La sécurité}
    
    \begin{exampleblock}{Partie "encoders"}
        \begin{verbatim}
encoders :
    Site\UtilisateurBundle\Entity\Utilisateur : sha512
        \end{verbatim}
          
    \end{exampleblock}
    
\end{frame}

\begin{frame}[fragile]{La sécurité}
    
    \begin{exampleblock}{Partie "role\_hierarchy"}
        \begin{verbatim}
role_hierarchy:
    ROLE_TUTEUR : ROLE_USER
    ROLE_SECRETAIRE : [ROLE_TUTEUR, ROLE_USER]
    ROLE_ADMIN:[ROLE_USER, ROLE_TUTEUR, ROLE_SECRETAIRE]
        \end{verbatim}
        
    \end{exampleblock}
    
\end{frame}

\begin{frame}[fragile]{La sécurité}
    
    \begin{exampleblock}{Partie firewall}
         \begin{verbatim}
firewalls:
    main :
        pattern : ^/ 
        anonymous : true 
        provider :  main 
        form_login :
            login_path : site_homepage
            check_path : fos_user_security_check
        logout :
            path : fos_user_security_logout
            target : / 
         \end{verbatim}
    \end{exampleblock}
    
\end{frame}


\begin{frame}[fragile]{La sécurité} 
    \begin{exampleblock}{Partie "providers"}
        \begin{verbatim}
providers:
    main :
        id : fos_user.user_provider.username

        \end{verbatim}
        
    \end{exampleblock}
\end{frame}

\begin{frame}[fragile]{La sécurité} 
    \begin{exampleblock}{Partie "acces\_control"}
        \begin{verbatim}
access_control:
    - {path : ^/tuteur, role : ROLE_TUTEUR}
    - {path : ^/admin, role : ROLE_ADMIN}
    - {path : ^/secretaire, role : ROLE_SECRETAIRE}
    - {path : ^/projet, role : ROLE_TUTEUR}
    - {path : ^/register, role : ROLE_ADMIN}
    - {path : ^/soutenance, role : ROLE_ADMIN}

        \end{verbatim}
        
    \end{exampleblock}
\end{frame}

\subsection{La gestion des utilisateurs} 

\begin{frame}[fragile]{Le FOSUserBundle} 
    \begin{itemize}
    \item Authentification
    \item Inscription
    \item Changement de mot de passe
    \item Modification des données personelles
    \item Logout
    \end{itemize}
\end{frame}

\begin{frame}[fragile]{Le FOSUserBundle}
    \begin{block}{De légères modifications}
        \begin{itemize}
        \item Suppression de la connection automatique après inscription
        \item Ajout de 2 fonctions pour différencier les rôles
        \item Entité Utilisateur héritant de BaseUser
        \item Modification des vues du FOSUserBundle(notamment la vue permettant d'inscrire un utilisateur)
        \end{itemize}
    \end{block}
\end{frame}

%Fin de la partie Brice ! De Nice !


%Diapo 3 : Partie III - Bundles
\section{Bundles}
\subsection{Routes}
% Début partie Brett & Julia 
\begin{frame}{Les Bundles de Symfony}
    \frametitle{II - Bundle}
    \framesubtitle{}
    \begin{block}{En 3 parties !}
        \begin{itemize}
        \item Modèle (Doctrine)
        \item Vue(twig)
        \item Contrôleurs (PHP)
        \end{itemize}
    \end{block}
\end{frame}
\begin{frame}{Les routes de Symfony2}
    \frametitle{II - Les Routes}
    \framesubtitle{Du YML !}
    \begin{block}{Du plus générique au plus spécifique}
        \begin{itemize}
        \item Rôle d'une route : A partir d'une URL, définir quel contrôleur appeler
        \item Liaison URL -> Contrôleur
        \item Choix YML
        \end{itemize}
    \end{block}
\end{frame}
\subsection{Contrôleur}
%\begin{frame}{II - Les Bundles}
 % \framesubtitle{Définition}
  %  \begin{block}{Définition d'un contrôleur}
   %   Un contrôleur est un fichier contenant des fonctions qui communique avec la base de données et la vue, cf modèle MVC. Ses fonctions prennent le suffixe Action si elles retournent une vue.
    % \end{block}
%\end{frame}
\subsection{Bundles}
\begin{frame}
    \frametitle{II - Les Bundles}
    \framesubtitle{Cinq différents bundles}
     %   - (toujours si tu veux)
      %  - Je demarre par les routes générales, la partie d'au dessus la
       % - je continue en expliquant la vue de General Bundle
        %- tu reprends sur le GeneralBundle
        %- Tu t'arretes moitité adminBundle(gros morceau)
    %    - je reprends et je finis par UtilisateurBundle (entité)
     %   
    \begin{itemize}
        \item \textbf{GeneralBundle :} Permet de renvoyer la page d'acceuil\\
        \item \textbf{AdminBundle :} Contient toutes les fonctionnalités de l'administrateur\\
        \item \textbf{UtilisateurBundle}\\ 
        \item \textbf{ProjetBundle :} Permet la gestion des projets\\
        \item \textbf{SoutenanceBundle :} Permet de gérer les soutenances\\
    \end{itemize}
    \begin{block}{}
       Les Bundles contiennent les contrôleurs, les fichiers Twig, les entités et les formulaires, entre autres.
    \end{block}
\end{frame}
%VueGeneral
%\begin{frame}{Frame Title}

%\end{frame}



%GeneralController
\begin{frame}
 \frametitle{II - Les Bundles}
  \framesubtitle{GeneralBundle}
    \begin{itemize}
    \item Vue Admin
     \item DefaultController\\
     $\rightarrow$ indexAction(\$page)\\
     \item Entity\\
      $\rightarrow$ Message\\
      $\rightarrow$ RDV\\
     $\rightarrow$  Souhait\\
     $\rightarrow$  Ue\\
    \end{itemize}
\end{frame}

\begin{frame}
 \frametitle{II - Les Bundles}
  \framesubtitle{AdminBundle}\\
   \begin{itemize}
   \item DefaultController\\
     $\rightarrow$ phaseAction(\$ue)\\
     $\rightarrow$ trombiAction(\$id)\\
     $\rightarrow$ mailTousTuteursAction()
   \item GestionController\\
     $\rightarrow$ modifierEtudiantAction()\\%je m'arrête ici ça ira ?
     $\rightarrow$ supprimerUtilisateurAction(\$id)\\% ces fonctions marchent ensemble 
     $\rightarrow$ supprimerUtilisateurId(\$id)\\
     $\rightarrow$ ajouterEtudiantAction()\\
     $\rightarrow$ remplirCsv(\$request)\\
     $\rightarrow$ sauverBDDAction()
     \item Mail\\
     $\rightarrow$ Classe qui contient tous les attributs nécessaires à un mail
    
   \end{itemize}
\end{frame}


%Projet Bundle
\begin{frame}
 \frametitle{II - Les Bundles}
  \framesubtitle{ProjetBundle}\\
   \begin{itemize}
    \item L'entité projet\\
     $\rightarrow$ Classe qui contient tous les attributs nécessaires aux projets
   \item AffectationController\\
     $\rightarrow$ affectationManuelleAction (id)\\
     $\rightarrow$ affecterEtudManuAction (id)\\
     $\rightarrow$ supprimerAffectationAction (id, idProjet)\\
     $\rightarrow$ affectationChronoAction ()
   \item DefaultController\\
     $\rightarrow$ ajouterProjetAction ()\\
     $\rightarrow$ supprimerProjetAction (id)\\
     $\rightarrow$ modifierProjetAction (id)\\
     $\rightarrow$ modifSouhaitAction ()
   \end{itemize}
\end{frame}

%Projet Bundle entité
\begin{frame}
 \frametitle{II - Les Bundles}
  \framesubtitle{L'entité projet}\\
   \begin{itemize}
    \item L'entité projet\\
     $\rightarrow$ soutenance\\
     $\rightarrow$ ue\\
     $\rightarrow$ nombre max d'étudiant\\
     $\rightarrow$ nombre min d'étudiant\\
     $\rightarrow$ titre\\
     $\rightarrow$ description\\
     $\rightarrow$ lien \\
     $\rightarrow$ fichier \\
     $\rightarrow$ enseignant
     \end{itemize}
\end{frame}

%Projet Bundle DefaultController
\begin{frame}
 \frametitle{II - Les Bundles}
  \framesubtitle{le defaultController}
   \begin{itemize}
     \item ajouterProjetAction ():\\
     $\rightarrow$ ajoute un projet
     \item supprimerProjetAction (id):\\
     $\rightarrow$ supprime un projet
     \item modifierProjetAction (id)\\
     $\rightarrow$ modifie un projet
     \item modifSouhaitAction ()\\
     $\rightarrow$ permet aux étudiants de faire ou modifier leurs voeux
   \end{itemize}
\end{frame}

%Projet Bundle affectationController
\begin{frame}
 \frametitle{II - Les Bundles}
  \framesubtitle{L'affectationController}
    \begin{itemize}
     \item affectationManuelleAction (id):\\
     $\rightarrow$ affiche un projet en fonction de son id et affiche un formulaire pour ajouter un étudiant.
     \item affecterEtudManuAction (id):\\
     $\rightarrow$ permet d'ajouter un étudiant à un projet
     \item supprimerAffectationAction (id, idProjet):\\
     $\rightarrow$supprime un étudiant d'un projet
     \item affectationChronoAction ():\\
     $\rightarrow$affecte automatiquement les étudiants à un projet en fonction de leur voeux.
   \end{itemize}
\end{frame}

%Soutenance Bundle
%L'utilisatuer clique menu sur planning soutenance => routing : %soutenance bundle , defaultController, indexAction
%orm find all selectionne QUE projet ayant soutenance
% vue twig default index tableau info : date jury salle projet
%Pour modifier une soutenance, tuteur ou + clique sur ??? 
% et clique sur le projet qu'il souhaite plannifier
%Page avec formulaire date heure salle jury 1/2
%Validation => routing : "", "", ajouterSoutenanceAction(id)
%Orm find(id) if soutenance on hydrate (maj), sinon on créer un new objet Soutenance et RDV, lie rdv à sout et sout a projet
% vue twig du meme forme avec message sucess ou echec
\begin{frame}
    \frametitle{II - Les bundles}
    \framesubtitle{soutenanceController}
    \begin{itemize}
        \item index :\\
        $\rightarrow$Retourne un tableau affichant le planning\\
        (la date, l'heure, la salle et les deux jurys)
        \item ajoutSoutenance(\$id):\\
            $\rightarrow$ Permet d'ajouter/modifier une soutenance en donnant l'id du projet\\
            $\rightarrow$ Crée une soutenance avec la date, l'heure, la salle et les deux jurys
        \item L'entité soutenance contient :\\
            $\rightarrow$ rdv : date, heure et salle du rendez-vous\\
            $\rightarrow$ jury1\\
            $\rightarrow$ jury2
    \end{itemize}
\end{frame}




\section{FacebookBundle(s)}
\begin{frame}
    \frametitle{FacebookBundle}
    \framesubtitle{description}
    %block{titre}
    \begin{itemize}
        \item \textbf{Comment implémenter une couche sociale au projet } : ainsi que son intégration dans symfony2.
        
    \end{itemize}
\end{frame}
\begin{frame}
    \frametitle{FacebookBundle}
    \framesubtitle{description}
    %block{titre}
    \begin{itemize}
        \item \textbf{Besoin de centraliser les informations.} : Via les services de Facebook.
        \item \textbf{Besoin d'absence de modération.} : Via la mise en place d'une structure indépendente.
    \end{itemize}
\end{frame}
\begin{frame}
    \frametitle{FacebookBundle}
    \framesubtitle{description}
    %block{titre}
    \begin{itemize}
        \item \textbf{FosFacebookBundle} : Intégre le SDK GraphAPI Facebook.
        \item \textbf{FacebookDisplayBundle} : Forme une surcouche du BaseFacebook.
    \end{itemize}
\end{frame}


\section{Conclusion}
\subsection{Organisation du groupe et du travail}

%partie pour Clement
%Diapo 5 : organisation du groupe et du travail + diagamme de Gantt
\begin{frame}
    \frametitle{Conclusion}
    \framesubtitle{Organisation du groupe et du travail}
    \begin{block}{Organisation du groupe et du travail}
        \begin{itemize}
        \item Rendez-vous certains mardis avec le tuteur pour voir l'avancée du travail et mise en accord de la conception
        \item Rendez-vous du groupe en dehors des planning mis à disposition
        \item Utilisation de Facebook, GoogleDrive et Google Doc SVN pour le travail en ligne, prise de rendez-vous et feedbacks
        \item Division du groupe en sous-groupe d'une ou deux personnes pour travailler sur une partie
        \item Assemblage du travail
        \end{itemize}
    \end{block}
\end{frame}

\subsection{Diagrammge de Gantt}
\begin{frame}
    \frametitle{Conclusion}
    \frametitle{Diagramme de Gantt}
    \fbox{\includegraphics[scale=0.4]{diagrammeGanttReunion.jpg}} %image du diagramme à rajouter
\end{frame}

\subsection{Conclusion}
%Diapo 5bis : CONCLUSION
\begin{frame}
    \frametitle{Conclusion}
    \framesubtitle{L'union fait la force}
    \begin{block}{Conclusion}
        \begin{itemize}
            \item Projet bien arrivé à terme
            \item Site web propre et fonctionnel
            \item Quelques difficultés sur l'apprentissage de
            Symfony
            \item Progrès possible : optimisation ergonomique
            \item Expérience personnelle : cohésion de groupe
        \end{itemize}
    \end{block}
    \begin{block}{Savoir acquis}
        \begin{itemize}
            \item \textbf{Savoir technique :} apprentissage du framework Symfony ainsi que d'autres outils
            \item \textbf{Savoir personnel :} apprentissage du travail en groupe
        \end{itemize}
    \end{block}
\end{frame}

\end{document}


